In response to the needs of the software market, software developers are continually at work developing new versions of software having increased capabilities and functionality. Most software developers regularly offer upgrades to their product lines to stimulate further sales and interest among their customers. Users are motivated to upgrade to obtain access to the enhanced functionality and capabilities. Upgrades are also sometimes directed at correcting errors or “bugs” in a prior version of the software. For individual users of software who typically install a specific version of a software product on a computing device, the decision of whether to upgrade to a newer version of the software may be made as a matter of personal preference.
However, in a networked environment, the individual software users are often not in a position to determine the software version that is executed on their computing device. Furthermore, in such a networked environment, any errors or loss of functionality associated with upgrading from one version to a different version is not isolated to a single computing device and user, but instead will typically affect each network client that uses the software being upgraded.
Most updates to complex multi-tiered web hosted applications require the following steps:                bring down the whole application (thereby preventing clients from accessing the application);        update the software;        migrate all data to the new version of the software; and        restart the application (thereby enabling clients to access the application).This procedure can be tedious, especially when the amount of application specific data stored is large, and/or when the software is complex, which is often the case for applications used in a network environment. Furthermore, the updating and migration processes described above are quite error prone, and it is generally not a simple task to return to the last good configuration of software and client data if an error in a newer version of the software is discovered. These problems can all too easily result in significant downtime for network clients.        
While new versions of software are generally rigorously tested prior to being released for a general upgrade installation, not all errors will likely be detected during pre-release testing. Even when a new version of software is relatively error free, the time required to migrate all data into a new format used by the new version can be so significant as to result in an undesirably long interruption of service provided by the software on the network. Particularly for commercial ventures, such lengthy downtimes are preferably avoided.
It would thus be desirable to provide networks with the ability to install multiple versions (i.e., an existing and a new version) of software side-by-side, to verify the functionality of the new version of the software using a selected portion of the network clients, while the remaining portion of the network clients continue to be serviced by one or more previous versions of the software. Thus, if problems are discovered relating to the new version of software, the upgrade might then be halted without adversely impacting all of the network clients. Preferably, only a small portion of network clients should be enabled to access the new version of the software until that version of the software is proven robust and generally error free. It would also be desirable for such upgrading and simultaneous functioning of multiple software versions to occur in a manner that is transparent to network clients, and minimizes downtime experienced by network clients.